﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;
using DevExpress.Utils;
using System.Linq;
using System.Xml;

namespace DevEx
{
    public partial class ucVatTu : DevExpress.XtraEditors.XtraUserControl
    {
        QLVTDataContext dc = new QLVTDataContext();
        public XtraForm _frm;
        private System.Diagnostics.Process _pKeyBoard = null;
        
        public ucVatTu()
        {
            InitializeComponent();
        }

        public ucVatTu(XtraForm frm)
        {
            InitializeComponent();
            _frm = frm;
        }

        
        CVatTu m_vatTu = new CVatTu();

        private void ucVatTu_Load(object sender, EventArgs e)
        {
            KhoiTaoRootLoaiVatTu();
            KhoiTaolueDVT();
            gridView1.OptionsBehavior.Editable = false;
            KhoiTaoGiaoDien(true);
        }

        public void KhoiTaolueDVT()
        {
            CDVT m_DVT = new CDVT();
            lueDVT.Properties.DisplayMember = "DVT";
            lueDVT.Properties.ValueMember = "ID_DVT";

            lueDVT.Properties.DataSource = m_DVT.SelectAllRecord();
            lueDVT.Properties.PopulateColumns();
            lueDVT.Properties.Columns["ID_DVT"].Visible = false;            
        }
        
        public void KhoiTaoRootLoaiVatTu()
        {
            tlLoaiVatTu.BeginUpdate();
            tlLoaiVatTu.Columns.Add();
            tlLoaiVatTu.Columns[0].Caption = "ID_VatTu";
            tlLoaiVatTu.Columns[0].VisibleIndex = 0;
            tlLoaiVatTu.Columns[0].Visible = false;
            tlLoaiVatTu.Columns.Add();
            tlLoaiVatTu.Columns[1].Caption = "Ma_VatTu";
            tlLoaiVatTu.Columns[1].VisibleIndex = 1;
            tlLoaiVatTu.Columns[1].Visible = false;
            tlLoaiVatTu.Columns.Add();
            tlLoaiVatTu.Columns[2].Caption = "Loại Vật Tư";
            tlLoaiVatTu.Columns[2].Name = "VatTu";
            tlLoaiVatTu.Columns[2].VisibleIndex = 2;
            tlLoaiVatTu.Columns.Add();
            tlLoaiVatTu.Columns[3].Caption = "Ma_LoaiVatTu";
            tlLoaiVatTu.Columns[3].VisibleIndex = 3;
            tlLoaiVatTu.Columns[3].Visible = false;
            tlLoaiVatTu.Columns.Add();
            tlLoaiVatTu.Columns[4].Caption = "ID_DVT";
            tlLoaiVatTu.Columns[4].VisibleIndex = 4;
            tlLoaiVatTu.Columns[4].Visible = false;
            tlLoaiVatTu.Columns.Add();
            tlLoaiVatTu.Columns[5].Caption = "Cuoi";
            tlLoaiVatTu.Columns[5].VisibleIndex = 5;
            tlLoaiVatTu.Columns[5].Visible = false;
            tlLoaiVatTu.EndUpdate();
            tlLoaiVatTu.OptionsSelection.MultiSelect = false;

            tlLoaiVatTu.LookAndFeel.UseDefaultLookAndFeel = true;
            tlLoaiVatTu.LookAndFeel.SkinName = "iMaginary";
            tlLoaiVatTu.OptionsBehavior.Editable = false;
            //tlLoaiVatTu.OptionsView.ShowColumns = false;
            tlLoaiVatTu.OptionsView.ShowIndicator = false;
            tlLoaiVatTu.OptionsView.ShowHorzLines = false;
            tlLoaiVatTu.OptionsView.ShowVertLines = false;


            //Tạo nút gốc
            TreeListNode root = null;
            var vatTu = m_vatTu.SelectRecordByID(1);

            TreeListNode newNode;
            newNode = tlLoaiVatTu.AppendNode(new object[] { vatTu.ID_VatTu, vatTu.Ma_VatTu, vatTu.VatTu, vatTu.Ma_LoaiVatTu, vatTu.ID_DVT }, root);

            //tlLoaiVatTu.EndUnboundLoad();
            KhoiTaotreelistLoaiVatTu(Convert.ToString(newNode.GetValue("Ma_VatTu")), newNode);
        }

        public void KhoiTaotreelistLoaiVatTu(String LoaiVatTu, TreeListNode parentNode)
        {
            var listVatTu = m_vatTu.SelectAllRecordByLoaiVatTu_Cuoi(LoaiVatTu, false);

            TreeListNode newNode;
            foreach (tblVatTu vatTu in listVatTu)
            {
                newNode = tlLoaiVatTu.AppendNode(new object[] { vatTu.ID_VatTu, vatTu.Ma_VatTu, vatTu.VatTu, vatTu.Ma_LoaiVatTu, vatTu.ID_DVT }, parentNode);                
            }
        }

        private void tlLoaiVatTu_AfterFocusNode(object sender, NodeEventArgs e)
        {
            //MessageBox.Show(e.Node.GetValue("Ma_VatTu").ToString());
            String maVatTu = Convert.ToString(tlLoaiVatTu.FocusedNode.GetValue("Ma_VatTu"));

            if (!e.Node.HasChildren)
            {
                KhoiTaotreelistLoaiVatTu(maVatTu, e.Node);
            }
            
            KhoiTaodtgVatTu(maVatTu,"");
            txtMaVatTu.EditValue = gridView1.GetFocusedRowCellValue("Ma_VatTu");
            txtVatTu.EditValue = gridView1.GetFocusedRowCellValue("VatTu");
            lueDVT.EditValue = gridView1.GetFocusedRowCellValue("ID_DVT");
            txtMaKyHieu.EditValue = gridView1.GetFocusedRowCellValue("MaKyHieu");
        }

        public void KhoiTaodtgVatTu(String LoaiVatTu, String Sname)
        {
            //var listVatTu = m_vatTu.SelectAllRecordByLoaiVatTu(LoaiVatTu);
            var q = from p in dc.tblVatTus
                    where p.Ma_LoaiVatTu == LoaiVatTu
                    select new
                    {
                        p.ID_VatTu,
                        p.Ma_VatTu,
                        p.VatTu,
                        p.Ma_LoaiVatTu,
                        p.MaKyHieu,
                        p.ID_DVT,
                        p.tblDVT.DVT,
                        p.Cuoi                        
                    };

            dtgVatTu.DataSource = q;

            //focus
            int focusrow = 0;
            if (Sname != "")
            {
                for (int i = 0; i < gridView1.RowCount; i++)
                {
                    // if (dtcustomer.Rows[i]["CUST_NAME"].ToString().ToUpper() == Sname.ToUpper())
                    if (gridView1.GetRowCellValue(i, "VatTu").ToString().ToUpper() == Sname.ToUpper())
                    {
                        focusrow = i;
                    }
                }
            }

            gridView1.FocusedRowHandle = focusrow;

            FormatdtgVatTu();
        }

        public void FormatdtgVatTu()
        {
            gridView1.OptionsBehavior.ReadOnly = true;

            gridView1.Columns.ColumnByFieldName("ID_VatTu").Visible = false;
            //gridView1.Columns.ColumnByFieldName("Ma_VatTu").Visible = false;
            gridView1.Columns.ColumnByFieldName("Ma_LoaiVatTu").Visible = false;
            gridView1.Columns.ColumnByFieldName("Cuoi").Visible = false;
            gridView1.Columns.ColumnByFieldName("ID_DVT").Visible = false;            

            //Columns DVT
            var cl_DVT = gridView1.Columns.ColumnByFieldName("DVT");
            cl_DVT.Width = 100;
            cl_DVT.Caption = "Đơn vị tính";            
            cl_DVT.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
            cl_DVT.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;

            //Columns VatTu
            var cl_VatTu = gridView1.Columns.ColumnByFieldName("VatTu");
            cl_VatTu.Caption = "Vật tư";
            cl_VatTu.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Near;
            cl_VatTu.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;

            //Columns MaVatTu
            var cl_MaVatTu = gridView1.Columns.ColumnByFieldName("Ma_VatTu");
            cl_MaVatTu.Width = 150;
            cl_MaVatTu.Caption = "Mã vật tư";
            cl_MaVatTu.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
            cl_MaVatTu.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
            //Columns MaVatTu

            var cl_MaKyHieu = gridView1.Columns.ColumnByFieldName("MaKyHieu");
            cl_MaKyHieu.Width = 200;
            cl_MaKyHieu.Caption = "Mã ký hiệu";
            cl_MaKyHieu.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Near;
            cl_MaKyHieu.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;            
        }

        Boolean fThem = false;
        Boolean fSua = false;
        CVatTu m_vattu = new CVatTu();

        private void btnThem_Click(object sender, EventArgs e)
        {
            KhoiTaoGiaoDien(false);
            txtVatTu.Focus();
            fThem = true;
            Clear();

            String LoaiVatTu = Convert.ToString(tlLoaiVatTu.FocusedNode.GetValue("Ma_VatTu"));
            var q = (from p in dc.tblVatTus
                     where p.Ma_LoaiVatTu == LoaiVatTu && p.Cuoi == false  
                     select p).Count();

            Boolean Cuoi = true;

            if (q > 0)
                Cuoi = false;

            txtMaVatTu.EditValue = m_vattu.GetNewMaVatTu(LoaiVatTu, Cuoi);
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            KhoiTaoGiaoDien(false);
            fSua = true;
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            // Kiểm tra
            int ID_VatTu = Convert.ToInt32(gridView1.GetFocusedRowCellValue("ID_VatTu"));

            QLVTDataContext dc = new QLVTDataContext();
            var tt_Ton = (from p in dc.tblTons where p.ID_VatTu == ID_VatTu select p).Count();            

            if (tt_Ton > 0)
            {
                MessageBox.Show("Vật tư: " + txtVatTu.Text + " đang sử dụng, không xóa được.", "Chú ý");
                return;
            }         
                                   
            if (MessageBox.Show("Bạn muốn xóa vật tư: " + txtVatTu.Text , "Chú ý", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
            {
                                
                m_vattu.Delete(ID_VatTu);

                String LoaiVatTu = Convert.ToString(tlLoaiVatTu.FocusedNode.GetValue("Ma_VatTu"));
                KhoiTaodtgVatTu(LoaiVatTu,"");
            }            
        }

        private void btnGhi_Click(object sender, EventArgs e)
        {
            String LoaiVatTu = Convert.ToString(tlLoaiVatTu.FocusedNode.GetValue("Ma_VatTu"));
            var q = (from p in dc.tblVatTus
                     where p.Ma_LoaiVatTu == LoaiVatTu
                     select p).Count();

            Boolean Cuoi = false;

            if (q > 0)
                Cuoi =true;

            if (fThem)
            {
                tblVatTu obj_vattu = new tblVatTu();
                obj_vattu.Ma_VatTu = Convert.ToString(txtMaVatTu.EditValue);
                obj_vattu.VatTu = Convert.ToString(txtVatTu.EditValue);
                obj_vattu.Ma_LoaiVatTu = LoaiVatTu;
                obj_vattu.Cuoi = Cuoi;
                obj_vattu.MaKyHieu = Convert.ToString(txtMaKyHieu.EditValue);
                int ID_DVT = Convert.ToInt32(lueDVT.EditValue);
                if (ID_DVT == 0)
                    obj_vattu.ID_DVT = null;
                else
                    obj_vattu.ID_DVT = ID_DVT;
                
                m_vattu.Insert(obj_vattu);
            }

            if (fSua)
            {
                tblVatTu obj_vattu = new tblVatTu();
                obj_vattu.ID_VatTu = Convert.ToInt32(gridView1.GetFocusedRowCellValue("ID_VatTu"));
                obj_vattu.Ma_VatTu = Convert.ToString(txtMaVatTu.EditValue);
                obj_vattu.VatTu = Convert.ToString(txtVatTu.EditValue);
                obj_vattu.Ma_LoaiVatTu = LoaiVatTu;
                obj_vattu.MaKyHieu = Convert.ToString(txtMaKyHieu.EditValue);
                obj_vattu.Cuoi = Convert.ToBoolean(gridView1.GetFocusedRowCellValue("Cuoi")); 
                obj_vattu.ID_DVT = Convert.ToInt32(lueDVT.EditValue);
                m_vattu.Update(obj_vattu);
            }

            KhoiTaodtgVatTu(LoaiVatTu, txtVatTu.Text);
            KhoiTaoGiaoDien(true);
            fThem = false;
            fSua = false;
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            KhoiTaoGiaoDien(true);
            String LoaiVatTu = Convert.ToString(tlLoaiVatTu.FocusedNode.GetValue("Ma_VatTu"));
            String VatTu = Convert.ToString(gridView1.GetFocusedRowCellValue("VatTu"));
            KhoiTaodtgVatTu(LoaiVatTu,VatTu);
            fThem = false;
            fSua = false;
        }

        public void KhoiTaoGiaoDien(Boolean f)
        {
            btnThem.Enabled = f;
            btnSua.Enabled = f;
            btnXoa.Enabled = f;
            btnGhi.Enabled = !f;
            btnHuy.Enabled = !f;
            txtMaVatTu.Properties.ReadOnly = true;
            txtVatTu.Properties.ReadOnly = f;
            txtMaKyHieu.Properties.ReadOnly = f;
            lueDVT.Properties.ReadOnly = f;
            tlLoaiVatTu.Enabled = f;
        }

        public void Clear()
        {
            txtMaVatTu.EditValue = "";
            txtVatTu.EditValue = "";
            txtMaKyHieu.EditValue = "";
            lueDVT.EditValue = null;
        }

        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            txtMaVatTu.EditValue = gridView1.GetFocusedRowCellValue("Ma_VatTu");
            txtMaKyHieu.EditValue = gridView1.GetFocusedRowCellValue("MaKyHieu");
            txtVatTu.EditValue = gridView1.GetFocusedRowCellValue("VatTu");
            lueDVT.EditValue = gridView1.GetFocusedRowCellValue("ID_DVT");
        }

        private void gridView1_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                if (_frm.Name == "frmVatTuNhap")
                {
                    int ID_VatTu = Convert.ToInt32(gridView1.GetFocusedRowCellValue("ID_VatTu"));
                    Boolean Cuoi = Convert.ToBoolean(gridView1.GetFocusedRowCellValue("Cuoi"));
                    if (Cuoi)
                        ((frmVatTuNhap)_frm).ChonVatTu(ID_VatTu);
                }            
            }
            catch{}
        }

        private void dtgVatTu_MouseDown(object sender, MouseEventArgs e)
        {
            // Khoá dtg khi thêm hoặc sửa
            if (btnThem.Enabled == true)
                (e as DXMouseEventArgs).Handled = false;
            else
                (e as DXMouseEventArgs).Handled = true;
        }

        private void btnBanPhimAo_Click(object sender, EventArgs e)
        {
            
            if(btnBanPhimAo.Text =="Bật bàn phím ảo")
            {
                btnBanPhimAo.Text = "Tắt bàn phím ảo";
                txtMaKyHieu.Focus();
                InputLanguage.CurrentInputLanguage = GetInputLanguageByName("Russia");
                if(_pKeyBoard ==null)
                {
                    _pKeyBoard = System.Diagnostics.Process.Start("osk.exe");
                }
            }
            else
            {
                InputLanguage.CurrentInputLanguage = GetInputLanguageByName("English");
                btnBanPhimAo.Text = "Bật bàn phím ảo";
                if (!_pKeyBoard.HasExited)
                {
                    _pKeyBoard.Kill();
                    _pKeyBoard.Dispose();
                }
                _pKeyBoard = null;
            }
        }
        public static InputLanguage GetInputLanguageByName(string inputName)
        {
            foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
            {
                if (lang.Culture.EnglishName.ToLower().StartsWith(inputName.ToLower()))
                    return lang;
            }
            return null;
        }
               
    }
}
